/**********************************************************************
<<<<<<< HEAD
 * 函数名称： // pw_authentification
 * 功能描述： // 密码验证
 * 访问的表： // password
 * 修改的表： // NULL
 * 输入参数： // char* p_user, const char *p_name, int netfd
 * 返回的值： // 正确返回0， 错误返回1
 * 更新说明： // 表中增加了墓地列，可以判断用户是否存在
 * 修改日期        版本号     修改人          修改内容
 * -----------------------------------------------
 * 2023/04/16       V3.0       zhao            XXXX
 ***********************************************************************/
#include <func.h>

int pw_authentification(const char * p_user, const char * p_passwd, int netfd) {
    MYSQL * mysql = mysql_init(NULL); // 为mysql连接分配内存（线程不安全）
<<<<<<< HEAD

=======
>>>>>>> 566cda257c479a97dd56df32a0212db8e685ab2f

    MYSQL * ret = mysql_real_connect(mysql,"localhost", "root", "123456", "test", 0, NULL, 0);
    if(ret == NULL){
        fprintf(stderr,"mysql connect error:%s\n", mysql_error(mysql));
        return -1;
    }

    char sql[1024] = "select user, salt, passwd, tomb from password;";
    int qret = mysql_query(mysql,sql);
    if(qret != 0){
        fprintf(stderr,"sql error:%s\n", mysql_error(mysql));
        train.length = -1;
        send(netfd, &train.length, sizeof(int), 0);
        sprintf(train.data, "mysql connect error:%s\n", mysql_error(mysql));
        send(netfd, train.data, strlen(train.data), 0);
        return -1;
    }

    MYSQL_RES *result = mysql_store_result(mysql); //取出读取的结果
    char salt[30] = {0};
    char passwd[30] = {0};
    MYSQL_ROW row; //MYSQL_ROW 为char**

    unsigned int temp = 1;
    while((row = mysql_fetch_row(result)) != NULL){
        bzero(salt, sizeof(salt));
        bzero(passwd, sizeof(passwd));
        if(strcmp(row[0], p_user) == 0 && atoi(row[3]) != 1) {
            strcpy(salt, row[1]);
            strcpy(passwd, row[2]);

            if(strcmp(crypt(p_passwd, salt), passwd) == 0){
                train.length = 0;
                send(netfd, &train.length, sizeof(int), 0);
                sprintf(train.data, "passwd success\n");
                send(netfd, train.data, strlen(train.data), 0);
            }
            break;
        }else {
            temp++;
            if(temp == mysql_num_fields(result)) {
                train.length = -1;
                send(netfd, &train.length, sizeof(int), 0);
                sprintf(train.data, "not find %s\n", p_user);
                send(netfd, train.data, strlen(train.data), 0);
            }
            continue;
        }
    }
    
    mysql_free_result(result);
    mysql_close(mysql);
}
